#! /bin/bash
models=$(ollama list 2>/dev/null)
PORT=11434
function status_exit {
	if [[ $? -eq 1 ]]; then
		exit 1
	fi
}
#功能菜单函数
function f_Menu {
	echo "支持的功能："
	echo -e "\n\
(1) 安装并启动AI模型\n\
(2) 查看已经部署的AI模型\n\
(3) 删除不需要的AI模型\n\
(4) 退出程序\n"
	read -p "请输入一个数字，选择要使用的功能：" option
}
#设备端函数
function device_side {
	echo "支持部署的设备端："
	echo -e "\n\
(1) 安卓手机\n\
(2) Linux电脑\n"
}
# 获取系统信息并存储到变量中
function get_system_info {
	system_info=$(uname -a)
}
# 根据系统架构设置 ollama 变量
function system_arch {
	if echo "$system_info" | grep -qE "aarch64" && echo "$system_info" | grep -q "Android"; then
		ollama="pkg install ollama"
	elif echo "$system_info" | grep -q "aarch64"; then
		ollama="ollama-linux-arm64.tgz"
	elif echo "$system_info" | grep -q "x86_64"; then
		ollama="ollama-linux-amd64.tgz"
	elif echo "$system_info" | grep -q "i686"; then
		ollama="ollama-linux-i686.tgz"
	else
		echo -e "你的设备暂时不支持!"
		return 1
	fi
}
function model_Menu {
	echo "支持部署的AI模型："
	echo -e "\n\
(1) qwen2.5:0.5b\n\
(2) qwen3:0.6b\n\
(3) qwen2.5:1.5b\n\
(4) embeddinggemma-300m\n"
	read -p "选择想要部署的AI模型：" model_name
}
function status_judge {
	if [[ $? -eq 0 ]]; then
		echo "$1成功"
		ollama_serve
		return 0
	else
		echo "$1失败"
		return 1
	fi
}
function prompt {
	echo "ollama 没有安装"
	return 1
}
function prompt_1 {
	echo -e "输入无效！\n请重新输入！"
}
function judge_a {
	if echo "$(uname -a)" | grep -q "Android"; then
		if ! ls "$PREFIX/bin" | grep -q "ollama"; then
			prompt
		fi
	else
		if ! ls "/usr/bin" | grep -q "ollama"; then
			prompt
		fi
	fi
}
function judge_1 {
	if ls "$PREFIX/bin" | grep -q "ollama"; then
		echo "ollama已经存在。"
		ollama_serve
		return 0
	else
		$ollama
		status_judge "安装"
	fi
}
function judge_2 {
	if [[ -f "/root/$ollama" ]]; then
		echo "文件 "$ollama" 已经存在。"
		judge_3
	else
		echo "正在下载 $ollama 请稍等..."
		wget https://gitee.com/aiba51/ollama/releases/download/v0.1/$ollama -P /root
		judge_3
	fi
}
function judge_3 {
	if [[ $? -eq 0 ]]; then
		echo "文件 $ollama 下载成功"
		echo "正在解压，请稍等..."
		tar -C /usr -xzvf /root/$ollama
		status_judge "解压"
	else
		echo "文件 $ollama 下载失败"
		return 1
	fi
}
function judge_4 {
	if ls "/usr/bin" | grep -q "ollama"; then
		echo "ollama已经存在。"
		ollama_serve
	else
		judge_2
	fi
}
function judge_5 {
	if echo "$(uname -a)" | grep -q "Android"; then
		judge_1
	else
		judge_4
	fi
}
function case_option {
	case $model_name in
		1)
			ollama_run "qwen2.5:0.5b"
			return 0
			;;
		2)
			ollama_run "qwen3:0.6b"
			return 0
			;;
		3)
			ollama_run "qwen2.5:1.5b"
			return 0
			;;
		4)
			ollama_run "embeddinggemma-300m"
			return 0
			;;
		*)
			prompt_1
			;;
	esac
}
function cycle_1 {
	while true; do
		model_Menu
		judge_5
		case_option
		if [[ $? -eq 0 ]]; then
			break
		else
			status_exit
		fi
	done
}
# ollama serve 函数
function ollama_serve {
	if lsof -iTCP:$PORT | grep -q "ollama"; then
		echo "ollama服务已开启"
		return 0
	else
		echo "正在开启ollama服务"
		ollama serve 2>/dev/null &
		return 0
	fi
}
# ollama run 函数
function ollama_run {
	if echo "$models" | grep -q "$1"; then
		echo "正在运行 $1"
	else
		echo "正在下载 $1 请稍等..."
	fi
	ollama run $1
}
# ollama list 函数
function ollama_list {
	# 执行 ollama list 命令并获取输出
	# 检查是否有模型存在
	echo "$models" > tmp.txt
	tmp=$(sed -n '2p' < tmp.txt)
	if [[ -z "$tmp" ]]; then
		echo "没有找到任何AI模型。"
		return 1
	else
		echo "当前所有的AI模型："
		# 使用 awk 处理输出，为每个模型添加序号
		echo "$models" | awk 'NR>1 {print "("NR-1")" " " $0}'
		return 0
	fi
}
function judge_9 {
	# 检查输入是否为数字
	if ! [[ "$choice" =~ ^[0-9]+$ ]]; then
		echo "输入无效，请输入一个数字序号。"
		break
	fi
}
function judge_10 {
	# 读取用户输入的序号
	read -p "请输入要删除的模型序号，留空不删除：" choice
	if [[ -z "$choice" ]]; then
		echo "没有删除任何AI模型。"
		return 0
	else
		judge_9
	fi
	# 获取对应的模型名称
	model_to_remove=$(echo "$models" | sed -n "$(($choice + 1))p")
	# 检查模型是否存在
	if [[ -z "$model_to_remove" ]]; then
		echo "序号无效，请选择一个有效的模型序号。"
	fi
}
function judge_11 {
	if [[ $? -eq 0 ]]; then
		echo "模型 '$model_to_remove' 已成功删除。"
		return 0
	else
		echo "删除模型时发生错误。"
		return 1
	fi
}
function judge_12 {
	if [[ "$confirm" == [yY] ]]; then
		# 删除模型
		echo "正在删除模型 '$model_to_remove'..."
		ollama rm "$model_to_remove"
		judge_11
	else
		echo "删除操作已取消。"
	fi
}
function judge_13 {
	judge_10
	model_to_remove=$(echo "$model_to_remove" | cut -d " " -f 1)
	# 确认删除操作
	read -p "确定要删除模型 '$model_to_remove' 吗？(y/n): " confirm
	judge_12
}
function judge_8 {
	ollama_list
	if [[ $? -eq 0 ]]; then
		judge_13
		return 0
	else
		return 1
	fi
}
